【禁止合入】test(ci): 冒烟测试流水线负向验证 - #97
Conversation
|
antonjli seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account. You have signed the CLA already but the status is still pending? Let us recheck it. |
|
head_sha:
|
|
head_sha:
|
|
head_sha:
|
|
head_sha:
|
|
head_sha:
|
|
head_sha:
|
|
head_sha:
|
|
head_sha: [验证] 评论接口连通性测试,稍后删除。 |
|
head_sha:
|
| # | 类型 | 用例 | 原因(首行) |
|---|---|---|---|
| 1 | error | com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001 |
Elasticsearch request failed: method=PUT, path=/database_test_169734fa_6d08_4cbb_87a8_626f3364f251__test_documents, stat |
| 2 | error | com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002 |
failed to add unknown memory, reason: Elasticsearch request failed: method=PUT, path=/memory_engine_test_1ca6aa29_e1ab_4 |
| 3 | failure | com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 |
expected: |
根因分析
1. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001
失败原因分类:环境问题
具体失败原因:ES 集群分片达上限 1000/1000,新建索引被拒。与 PR 改动无直接因果链。
修复建议:清理 ES 集群旧测试索引或调大 cluster.max_shards_per_node。
其他建议:这是环境容量问题,可重跑;非 PR 回归。
2. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002
失败原因分类:环境问题
具体失败原因:同 #001,ES 分片上限。
修复建议:同 #001。
其他建议:与 #001 同源,修一处即解。
3. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001
失败原因分类:开发问题
具体失败原因:but was 末尾多了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE],PR 改了 MetaTemplateBuilder.streamBuild 返回值。
修复建议:回退 streamBuild 改动,去掉注入的标记字符串。
其他建议:本 PR 为负向验证(禁止合入),建议关闭 PR。
完整根因分析(含证据来源、修复代码 before/after)见 CI 产物目录下的
analysis.md/analysis.html。
|
head_sha:
|
| # | 类型 | 用例 | 原因(首行) |
|---|---|---|---|
| 1 | error | com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001 |
Elasticsearch request failed: method=PUT, path=/database_test_169734fa_6d08_4cbb_87a8_626f3364f251__test_documents, stat |
| 2 | error | com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002 |
failed to add unknown memory, reason: Elasticsearch request failed: method=PUT, path=/memory_engine_test_1ca6aa29_e1ab_4 |
| 3 | failure | com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 |
expected: |
根因分析
1. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001
失败原因分类:环境问题
具体失败原因:ES 集群分片达上限 1000/1000,新建索引被拒。与 PR 改动无直接因果链。
修复建议:清理 ES 集群旧测试索引或调大 cluster.max_shards_per_node。
其他建议:这是环境容量问题,可重跑;非 PR 回归。
2. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002
失败原因分类:环境问题
具体失败原因:同 #001,ES 分片上限。
修复建议:同 #001。
其他建议:与 #001 同源。
3. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001
失败原因分类:开发问题
具体失败原因:but was 末尾多了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE]。
修复建议:回退 streamBuild 改动。
其他建议:负向验证 PR,建议关闭。
完整根因分析(含证据来源、修复代码 before/after)见 CI 产物目录下的
analysis.md/analysis.html。
|
head_sha:
|
| # | 类型 | 用例 | 原因(首行) |
|---|---|---|---|
| 1 | error | com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001 |
Elasticsearch request failed: method=PUT, path=/database_test_169734fa_6d08_4cbb_87a8_626f3364f251__test_documents, stat |
| 2 | error | com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002 |
failed to add unknown memory, reason: Elasticsearch request failed: method=PUT, path=/memory_engine_test_1ca6aa29_e1ab_4 |
| 3 | failure | com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 |
expected: |
根因分析
1. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001
失败原因分类:环境问题
具体失败原因:ES 集群分片达上限 1000/1000,新建索引被拒。
修复建议:清理 ES 集群旧测试索引。
其他建议:环境问题,可重跑。
2. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002
失败原因分类:环境问题
具体失败原因:同 #001。
修复建议:同 #001。
其他建议:同源。
3. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001
失败原因分类:开发问题
具体失败原因:but was 末尾多了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE]。
修复建议:回退 streamBuild 改动。
其他建议:负向验证 PR,建议关闭。
📎 完整根因分析(含证据来源、修复代码 before/after):analysis.md。HTML 报告见 CI 产物目录
analysis.html。
|
head_sha:
|
| # | 类型 | 用例 | 原因(首行) |
|---|---|---|---|
| 1 | failure | com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 |
expected: |
根因分析
1. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001
失败原因分类:开发问题
具体失败原因:PR #227 的合入 commit eacc8003 在 MetaTemplateBuilder.streamBuild() 方法的返回语句中故意追加了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE] 标记字符串,导致流式构建的 prompt 输出末尾多出该标记,与测试断言期望的纯 prompt 内容不匹配。这是一次故意的负向验证——提交说明 test(ci): 重新触发冒烟失败验证 和前一个 commit 01356fdb(提交说明 test(ci): 注入冒烟流水线负向验证)明确表明该改动的目的就是让冒烟流水线失败,以验证 CI 负向检测能力。
修复建议:不修复代码——关闭或回退 PR。该 PR 的目的是验证冒烟流水线能否正确检测到失败(负向验证),而非功能开发。负向验证已通过(流水线确实报告了失败),PR 应关闭或回退,将 MetaTemplateBuilder.streamBuild() 恢复为 return result.toString();。
其他建议:- 负向验证 PR 不应合入目标分支,应在验证完成后立即回退。建议在 CI 流水线中增加对负向验证 PR 的自动标记和回退机制,避免人工遗漏。
- 若需保留冒烟流水线负向验证能力,建议将其作为 CI 脚本层面的注入(如临时 patch 或环境变量),而非在源码中硬编码失败标记,避免污染代码仓库历史。
📎 完整根因分析(含证据来源、修复代码 before/after):analysis.md。
|
head_sha:
|
|
head_sha:
|
| # | 类型 | 用例 | 原因(首行) |
|---|---|---|---|
| 1 | error | com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001 |
Elasticsearch request failed: method=PUT, path=/database_test_169734fa_6d08_4cbb_87a8_626f3364f251__test_documents, stat |
| 2 | error | com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002 |
failed to add unknown memory, reason: Elasticsearch request failed: method=PUT, path=/memory_engine_test_1ca6aa29_e1ab_4 |
| 3 | failure | com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 |
expected: |
根因分析
1. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001
失败原因分类:
环境问题
具体失败原因:
Elasticsearch 集群分片数已达上限(1000/1000),创建新索引时触发 validation_exception,导致测试用例中 ElasticsearchVectorStore.createCollection 调用失败。与 PR #227 代码变更无因果关联。
证据来源:
- 日志关键信息: Elasticsearch request failed: method=PUT, path=/database_test_xxx, status=400, body={"error":{"root_cause":[{"type":"validation_exception","reason":"this action would add [2] shards, but this cluster currently has [1000]/[1000] maximum normal shards open"}]}}
- 代码定位: com.openjiuwen.core.retrieval.vector_store.ElasticsearchVectorStore.requestText(ElasticsearchVectorStore.java:981) → createCollection → ensureCollection
- 其他: PR #227 仅变更 MetaTemplateBuilder.java,与 ES 操作无调用链关联
修复建议:
- 清理 ES 集群遗留测试索引(database_test_、memory_engine_test_)
- 调整 cluster.max_shards_per_node 上限
- 测试 teardown 删除临时索引
- 重新运行测试验证
其他建议:
环境问题,不应阻塞 PR 合入。CI 建议每次测试前清 ES 索引。
2. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002
失败原因分类:
环境问题
具体失败原因:
同 #001,ES 分片上限,LongTermMemory.addMessages 写 memory 索引时 400。
证据来源:
- 日志关键信息: [158002] failed to add unknown memory, reason: Elasticsearch request failed status=400
- 代码定位: LongTermMemory.addMessages(LongTermMemory.java:458)
- 其他: 与 #001 同源
修复建议:
同 #001。
其他建议:
同源,修一处即解。
3. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001
失败原因分类:
开发问题
具体失败原因:
PR #227 在 MetaTemplateBuilder.streamBuild 中将 return result.toString() 改为 return result.append("[INTENTIONAL_SMOKE_PIPELINE_FAILURE]").toString(),流式输出末尾多出标记,断言失败。负向验证 PR。
证据来源:
- 日志关键信息: 断言 expected 末尾"你是一个旅行助手\n",but was 末尾多了"[INTENTIONAL_SMOKE_PIPELINE_FAILURE]"
- 代码定位: MetaTemplateBuilder.java:151,diff - return result.toString(); → + return result.append("[INTENTIONAL_SMOKE_PIPELINE_FAILURE]").toString();
- 其他: 提交说明"test(ci): 重新触发冒烟失败验证"确认负向验证意图
修复建议:
回退 streamBuild 改动,或关闭/回退该 PR。
其他建议:
负向验证 PR,不应合入主分支。
📎 完整根因分析(含证据来源、修复代码 before/after):analysis.md。
|
head_sha:
|
| # | 类型 | 用例 | 原因(首行) |
|---|---|---|---|
| 1 | failure | com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 |
expected: |
根因分析
1. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001
失败原因分类:
开发问题
具体失败原因:
PR #227 在 MetaTemplateBuilder.streamBuild() 方法的返回值中故意追加了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE] 标记,导致流式构建的 prompt 输出末尾多出该字符串,与测试断言的预期值不匹配。该 PR 的提交说明为 test(ci): 重新触发冒烟失败验证,属于故意注入的负向验证:目的是让冒烟流水线检测到测试失败,从而验证流水线的负向检测能力是否正常工作。失败是预期行为,不是代码 bug。
证据来源:
- 日志关键信息: 断言消息中
but was末尾多了[INTENTIONAL_SMOKE_PIPELINE_FAILURE],而expected中没有该标记。差异点精确出现在你是一个旅行助手之后,but was追加了[INTENTIONAL_SMOKE_PIPELINE_FAILURE]。 - 代码定位:
src/main/java/com/openjiuwen/dev_tools/prompt_builder/builder/MetaTemplateBuilder.java:151(改后行),return result.append("[INTENTIONAL_SMOKE_PIPELINE_FAILURE]").toString(); - PR diff:
MetaTemplateBuilder.java第 148 行区域,-return result.toString();改为+return result.append("[INTENTIONAL_SMOKE_PIPELINE_FAILURE]").toString(); - 提交说明:
test(ci): 重新触发冒烟失败验证,明确表明这是 CI 负向验证测试。
修复建议:
不修复代码——关闭或回退 PR。该 PR 是故意注入的冒烟流水线负向验证,其唯一改动就是在 streamBuild() 返回值中追加破坏性标记 [INTENTIONAL_SMOKE_PIPELINE_FAILURE],目的是验证流水线能否正确检测到失败。既然流水线已成功捕获该失败(本次分析即证明),说明负向验证目的已达成,应关闭或回退该 PR,恢复 MetaTemplateBuilder.streamBuild() 的原始行为。
其他建议:
- 同类风险: 若后续仍需做冒烟流水线负向验证,建议通过 CI 配置/环境变量注入故障标记,而非在业务代码中硬编码破坏性字符串,避免合入后遗忘回退导致生产环境异常。
- 责任人: PR 作者 antonjli,应在确认负向验证通过后及时回退该 commit。
- 历史关联: 此前 PR #227 的另一个 commit
01356fdb(提交说明test(ci): 注入冒烟流水线负向验证)也是同类负向验证,当前 commiteacc8003是重新触发验证。
📎 完整根因分析(含证据来源、修复代码 before/after):analysis.md。
|
head_sha:
|
|
head_sha: [验证] Anton-bot 评论权限测试,稍后删除。 |
|
head_sha:
|
| # | 类型 | 用例 | 原因(首行) |
|---|---|---|---|
| 1 | error | com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001 |
Elasticsearch request failed: method=PUT, path=/database_test_169734fa_6d08_4cbb_87a8_626f3364f251__test_documents, stat |
| 2 | error | com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002 |
failed to add unknown memory, reason: Elasticsearch request failed: method=PUT, path=/memory_engine_test_1ca6aa29_e1ab_4 |
| 3 | failure | com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 |
expected: |
根因分析
1. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001
(未生成该用例的分析内容)
2. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002
(未生成该用例的分析内容)
3. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001
失败原因分类:
开发问题
具体失败原因:
PR #227 在 MetaTemplateBuilder.streamBuild 改了返回值,末尾多出 [INTENTIONAL_SMOKE_PIPELINE_FAILURE] 标记。负向验证 PR。
证据来源:
- 日志: 断言 but was 末尾多了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE]
- 代码: MetaTemplateBuilder.java:151
修复建议:
回退 streamBuild 改动或关闭 PR。
其他建议:
负向验证 PR,不应合入。
📎 完整根因分析(含证据来源、修复代码 before/after):analysis.md。
|
head_sha:
|
| # | 类型 | 用例 | 原因(首行) |
|---|---|---|---|
| 1 | failure | com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 |
expected: |
根因分析
1. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001
失败原因分类:
开发问题
具体失败原因:
PR #227 在 MetaTemplateBuilder.streamBuild 方法的返回值中故意追加了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE] 标记字符串,导致流式构建 prompt 的输出末尾多出该标记,与测试断言的预期值(不含此标记)不匹配。该改动由提交 eacc8003 引入,提交说明为 test(ci): 重新触发冒烟失败验证,属于故意注入的负向验证——用于检验冒烟流水线能否正确检测到测试失败,而非真实的业务回归。
证据来源:
- 日志关键信息: 断言消息
but was末尾多出[INTENTIONAL_SMOKE_PIPELINE_FAILURE],而expected中无此标记;异常类型为org.opentest4j.AssertionFailedError - 代码定位:
src/main/java/com/openjiuwen/dev_tools/prompt_builder/builder/MetaTemplateBuilder.java:151(原return result.toString();被改为return result.append("[INTENTIONAL_SMOKE_PIPELINE_FAILURE]").toString();) - 其他: PR diff 显示该文件仅此一处变更(+1/-1);提交说明
test(ci): 重新触发冒烟失败验证明确表明这是 CI 负向验证
修复建议:
不修复代码——关闭或回退 PR。本次失败是 PR 故意注入的负向验证标记,目的在于验证冒烟流水线的失败检测能力。冒烟流水线已成功检测到该失败(即负向验证目的已达成),应将 MetaTemplateBuilder.java:151 恢复为原始的 return result.toString();,或直接关闭/回退此 PR。
其他建议:
- 负向验证 PR 不应合入目标分支,验证完成后应立即回退注入的标记代码
- 建议将此类负向验证纳入 CI 流程的自动化机制:注入标记 → 跑流水线 → 验证失败检测 → 自动回退标记,避免人工手动操作导致标记遗漏
- 同类风险:若未来有类似的负向验证 PR,应在提交说明和 PR 描述中明确标注"此 PR 为 CI 负向验证,禁止合入",防止误合入
📎 完整根因分析(含证据来源、修复代码 before/after):analysis.md。
|
head_sha:
|
Paired: GitHub #97 ↔ GitCode !227
验证目的
在
src/main/java中加入一个最小、临时的故障注入,确认云端流水线会在冒烟测试阶段阻止不符合契约的生产代码。临时改动
dev_tools/prompt_builderMetaTemplateBuilder.streamBuild(Object, Object...)[INTENTIONAL_SMOKE_PIPELINE_FAILURE]PromptStreamBuild001Test本地验证结果:生产源码
mvn compile -DskipTests通过;目标用例为Tests run: 1, Failures: 1, Errors: 0, Skipped: 0,失败内容包含上述标记。English summary
Pipeline negative test only. This PR intentionally changes the output contract of
MetaTemplateBuilder.streamBuild(Object, Object...)in the prompt-builder module.The expected failing smoke case is
PromptStreamBuild001Test. It contains no featureor bug fix and must not be merged. Close the PR after the pipeline behavior is verified.